home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.21 / followmouse / followmouse.p < prev    next >
Text File  |  1995-04-23  |  16KB  |  494 lines

  1. {This Program was written by Kamran Karimi on an Amiga 500 running OS1.3 and
  2.  Compiled using Maxon KickPascal}
  3.  
  4. Program FollowMouse;
  5.  
  6. uses Intuition;
  7.  
  8.  
  9. Type
  10.   Plane = Array[1..39] of Word;     { 3*13 = 39;place for the images }
  11.  
  12.   label cont,EndIt;
  13.  
  14. Var
  15.   x1,y1,Old,R :integer;
  16.   x,add,Ang,Mx,My :real;
  17.   Wind :NewWindow;
  18.   Rast :^RastPort;
  19.   Win :^Window;
  20.   PRG,Name :IntuiText;
  21.   ImSquaint,ImDown,ImUp,ImLeft,ImRight,ImRU,ImRD,ImLU,
  22.                                    ImLD,ImF1,ImF2,ImF3,ImF4 :Image;
  23.   Down,Up,Left,Right,RU,RD,LU,LD,Squaint,F1,F2,F3,F4 :^Plane;
  24.  
  25. Procedure Initialize;
  26.  begin
  27.  
  28.   {initializing the images: }
  29.  
  30.  
  31.   Down^ :=Plane(
  32.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  33.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  34.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  35.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  36.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  37.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  38.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  39.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  40.   %0000011111000011 ,%1110000000000111 ,%1100001111100000,
  41.   %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  42.   %0000000111000011 ,%1000000000000001 ,%1100001110000000,
  43.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  44.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  45.  
  46.   Up^ := Plane(
  47.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  48.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  49.   %0000000111000011 ,%1000000000000001 ,%1100001110000000,
  50.   %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  51.   %0000011111000011 ,%1110000000000111 ,%1100001111100000,
  52.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  53.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  54.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  55.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  56.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  57.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  58.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  59.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  60.  
  61.   Left^ :=Plane(
  62.   %0000000000000000 ,%0000000000000000,%0000000000000000,
  63.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  64.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  65.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  66.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  67.   %0000110000111111 ,%1111000000001100 ,%0011111111110000,
  68.   %0000100000011111 ,%1111000000001000 ,%0001111111110000,
  69.   %0000110000111111 ,%1111000000001100 ,%0011111111110000,
  70.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  71.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  72.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  73.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  74.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  75.  
  76.   Right^ :=Plane(
  77.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  78.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  79.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  80.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  81.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  82.   %0000111111111100 ,%0011000000001111 ,%1111110000110000,
  83.   %0000111111111000 ,%0001000000001111 ,%1111100000010000,
  84.   %0000111111111100 ,%0011000000001111 ,%1111110000110000,
  85.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  86.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  87.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  88.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  89.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  90.  
  91.   LD^ :=Plane(
  92.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  93.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  94.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  95.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  96.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  97.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  98.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  99.   %0000111000011111 ,%1111000000001110 ,%0001111111110000,
  100.   %0000010000001111 ,%1110000000000100 ,%0000111111100000,
  101.   %0000001000011111 ,%1100000000000010 ,%0001111111000000,
  102.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  103.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  104.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  105.  
  106.   RD^ :=Plane(
  107.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  108.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  109.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  110.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  111.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  112.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  113.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  114.   %0000111111111000 ,%0111000000001111 ,%1111100001110000,
  115.   %0000011111110000 ,%0010000000000111 ,%1111000000100000,
  116.   %0000001111111000 ,%0100000000000011 ,%1111100001000000,
  117.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  118.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  119.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  120.  
  121.   RU^ :=Plane(
  122.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  123.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  124.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  125.   %0000001111111000 ,%0100000000000011 ,%1111100001000000,
  126.   %0000011111110000 ,%0010000000000111 ,%1111000000100000,
  127.   %0000111111111000 ,%0111000000001111 ,%1111100001110000,
  128.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  129.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  130.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  131.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  132.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  133.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  134.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  135.  
  136.   LU^ :=Plane(
  137.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  138.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  139.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  140.   %0000001000011111 ,%1100000000000010 ,%0001111111000000,
  141.   %0000010000001111 ,%1110000000000100 ,%0000111111100000,
  142.   %0000111000011111 ,%1111000000001110 ,%0001111111110000,
  143.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  144.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  145.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  146.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  147.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  148.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  149.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  150.  
  151.   Squaint^ :=Plane(
  152.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  153.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  154.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  155.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  156.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  157.   %0000111111111100 ,%0011000000000100 ,%0011111111110000,
  158.   %0000111111111000 ,%0001000000001000 ,%0001111111110000,
  159.   %0000111111111100 ,%0011000000001100 ,%0011111111110000,
  160.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  161.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  162.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  163.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  164.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  165.  
  166.  
  167.  F1^ :=Plane(
  168.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  169.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  170.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  171.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  172.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  173.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  174.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  175.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  176.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  177.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  178.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  179.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  180.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  181.  
  182.  F2^ :=Plane(
  183.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  184.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  185.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  186.   %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  187.   %0000010001111110 ,%0010000000000100 ,%0111111000100000,
  188.   %0000101111111111 ,%1101000000001011 ,%1111111111010000,
  189.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  190.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  191.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  192.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  193.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  194.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  195.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  196.  
  197.  F3^ :=Plane(
  198.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  199.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  200.   %0000000011111111 ,%1000000000000001 ,%1111111110000000,
  201.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  202.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  203.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  204.   %0000100000000000 ,%0001000000001000 ,%0000000000010000,
  205.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  206.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  207.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  208.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  209.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  210.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  211.  
  212.  F4^ :=Plane(
  213.   %0000000000000000 ,%0000000000000000 ,%0000000000000000,
  214.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  215.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  216.   %0000001111111111 ,%1100000000000011 ,%1111111111000000,
  217.   %0000011111111111 ,%1110000000000111 ,%1111111111100000,
  218.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  219.   %0000111111111111 ,%1111000000001111 ,%1111111111110000,
  220.   %0000101111111111 ,%1101000000001011 ,%1111111111010000,
  221.   %0000010001111110 ,%0010000000000100 ,%0111111000100000,
  222.   %0000001110000001 ,%1100000000000011 ,%1000000111000000,
  223.   %0000000111111111 ,%1000000000000001 ,%1111111110000000,
  224.   %0000000000111100 ,%0000000000000000 ,%0011110000000000,
  225.   %0000000000000000 ,%0000000000000000 ,%0000000000000000 );
  226.  
  227.  
  228.   { Image-Structure }
  229.   ImDown:=Image(1,1,
  230.              48,      { width }
  231.              13,      { hight }
  232.              1,       { one Plane }
  233.              Down,     { data }
  234.              1,0,
  235.              Nil);    { no further Images }
  236.  
  237.   ImUp:=Image(1,1,
  238.              48,
  239.              13,
  240.              1,
  241.              Up,
  242.              1,0,
  243.              Nil);
  244.  
  245.   ImRight:=Image(1,1,
  246.              48,
  247.              13,
  248.              1,
  249.              Right,
  250.              1,0,
  251.              Nil);
  252.  
  253.   ImLeft:=Image(1,1,
  254.              48,
  255.              13,
  256.              1,
  257.              Left,
  258.              1,0,
  259.              Nil);
  260.  
  261.   ImRU:=Image(1,1,
  262.              48,
  263.              13,
  264.              1,
  265.              RU,
  266.              1,0,
  267.              Nil);
  268.  
  269.   ImRD:=Image(1,1,
  270.              48,
  271.              13,
  272.              1,
  273.              RD,
  274.              1,0,
  275.              Nil);
  276.  
  277.   ImLU:=Image(1,1,
  278.              48,
  279.              13,
  280.              1,
  281.              LU,
  282.              1,0,
  283.              Nil);
  284.  
  285.   ImLD:=Image(1,1,
  286.              48,
  287.              13,
  288.              1,
  289.              LD,
  290.              1,0,
  291.              Nil);
  292.  
  293.   ImSquaint:=Image(1,1,
  294.              48,
  295.              13,
  296.              1,
  297.              Squaint,
  298.              1,0,
  299.              Nil);
  300.  
  301.   ImF1:=Image(1,1,
  302.              48,
  303.              13,
  304.              1,
  305.              F1,
  306.              1,0,
  307.              Nil);
  308.  
  309.   ImF2:=Image(1,1,
  310.              48,
  311.              13,
  312.              1,
  313.              F2,
  314.              1,0,
  315.              Nil);
  316.  
  317.   ImF3:=Image(1,1,
  318.              48,
  319.              13,
  320.              1,
  321.              F3,
  322.              1,0,
  323.              Nil);
  324.  
  325.   ImF4:=Image(1,1,
  326.              48,
  327.              13,
  328.              1,
  329.              F4,
  330.              1,0,
  331.              Nil);
  332.  end;
  333.  
  334.  
  335.  
  336. Procedure Blink;
  337.  begin
  338.   DrawImage(Rast,^ImF1, 0, 0);
  339.   Delay(1);
  340.   DrawImage(Rast,^ImF2, 0, 0);
  341.   Delay(1);
  342.   DrawImage(Rast,^ImF3, 0, 0);
  343.   Delay(1);
  344.   DrawImage(Rast,^ImF4, 0, 0);
  345.   Delay(1);
  346.   DrawImage(Rast,^ImF1, 0, 0);
  347.   Delay(12);
  348.   DrawImage(Rast,^ImF4, 0, 0);
  349.   Delay(1);
  350.   DrawImage(Rast,^ImF3, 0, 0);
  351.   Delay(1);
  352.   DrawImage(Rast,^ImF2, 0, 0);
  353.   Delay(1);
  354.   DrawImage(Rast,^ImF1, 0, 0);
  355.   Delay(3);
  356.  end;
  357.  
  358. Begin
  359.   PRG:=Intuitext(1,0,0,0,0,Nil  ,'   FollowMouse',Nil);
  360.   Name:=Intuitext(1,0,0,0,10,Nil,'By Kamran Karimi',^PRG);
  361.  
  362.   { reserve memory: } { 2 = "MEMF_CHIP" }
  363.   Squaint:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  364.   Up:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  365.   Down:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  366.   Left:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  367.   Right:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  368.   RU:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  369.   RD:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  370.   LU:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  371.   LD:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  372.   F1:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  373.   F2:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  374.   F3:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  375.   F4:=Ptr( Alloc_Mem(SizeOf(Plane), 2) );
  376.  
  377.   if(Squaint=nil) or (Up=Nil) or (Down=Nil) or (Right=Nil) or (Left=Nil)
  378.    or (LU=Nil) or (LD=Nil) or (RU=Nil) or (RD=Nil) or (F1=Nil)
  379.    or (F2=Nil) or (F3=Nil) or (F4=Nil) then goto EndIt;
  380.  
  381.   Initialize;
  382.  
  383.   Old:=SetTaskPri(FindTask(NIL),-2);
  384.   Randomize;
  385.   x1 := Random(400) + 80;
  386.   y1 := Random(140) + 20;
  387.   Wind:=NewWindow(x1,y1,150,35,0,1,0,WINDOWDRAG,
  388.                    Nil,Nil,'FollowMouse',Nil,Nil,0,0,0,0,WBENCHSCREEN);
  389.   Win:=OpenWindow(^Wind);
  390.   if (Win = Nil) then goto EndIt;
  391.   Rast:=Win^.RPort;
  392.   PrintItext(Rast,^Name,10,12);
  393.   Delay(200);
  394.   CloseWindow(Win);
  395.  
  396.   Wind:=NewWindow(x1,y1,50,13,0,0,0,WINDOWDRAG,
  397.                       Nil,Nil,'FM',Nil,Nil,0,0,0,0,WBENCHSCREEN);
  398.   Win:=OpenWindow(^Wind);
  399.   if (Win = Nil) then goto Endit;
  400.  
  401.   Rast:=Win^.RPort;
  402.  
  403.  
  404.   while (True) do  {This is the main loop}
  405.   begin
  406.   Mx :=Win^.MouseX;
  407.   Mx :=Mx-25;        {bring it to...(50 div 2 = 25)}
  408.   My :=Win^.MouseY;
  409.   My :=My-6;             {...the center of the window.(13 div 2 = 6)}
  410.   if My<0 then add:=90
  411.    else add:=270;    {these additions are necessary to gain a 'Normal' angel}
  412.         {any body who wants to know more can print the Tan(Mx/My) for some
  413.                                                                    Mx and My}
  414.   if My=0 then My:=1; {avoid division by zero}
  415.  
  416.   x:=Mx/My;             {now w'll take the Tan(Mx/My) by the Taylor method}
  417.   if abs(x)<1 then
  418.    Ang:=x-x*x*x/3+x*x*x*x*x/5
  419.   else if x>=1 then
  420.    Ang:=3.14/2-1/x+1/(3*x*x*x)
  421.   else Ang:=-3.14/2-1/x+1/(3*x*x*x);
  422.  
  423.   Ang:=Ang*180/3.14; {convert it to degrees}
  424.   Ang :=Ang+add;
  425.  
  426.            {now we'll decide which image to show}
  427.   if (abs(Mx)<12) and (abs(My)<9) then begin
  428.    DrawImage(Rast,^ImSquaint, 0, 0);
  429.    goto cont;
  430.    end;
  431.  
  432.   if (Ang > 5) and (Ang < 175) then begin
  433.  
  434.   if (Ang < 75) then begin
  435.    DrawImage(Rast, ^ImRU, 0, 0);
  436.    goto cont;
  437.    end;
  438.   if (Ang > 105) then begin
  439.    DrawImage(Rast,^ImLU, 0, 0);
  440.    goto cont;
  441.    end;
  442.    DrawImage(Rast,^ImUp, 0, 0);
  443.    goto cont;
  444.  
  445.   end;
  446.  
  447.   if (Ang >175) and (Ang <185) then begin
  448.    DrawImage(Rast,^ImLeft, 0, 0);
  449.    goto cont;
  450.    end;
  451.   if (Ang > 185) and (Ang <255) then begin
  452.    DrawImage(Rast,^ImLD, 0, 0);
  453.    goto cont;
  454.    end;
  455.   if (Ang >255) and (Ang <285) then begin
  456.    DrawImage(Rast,^ImDown, 0, 0);
  457.    goto cont;
  458.    end;
  459.   if (Ang >285) and (Ang <355) then begin
  460.    DrawImage(Rast,^ImRD, 0, 0);
  461.    goto cont;
  462.    end;
  463.   DrawImage(Rast,^ImRight, 0, 0);
  464. cont:
  465.   Delay(4);
  466.  
  467.   R := Random(40);
  468.   if R>38 then Blink;
  469.   end;
  470.  
  471. EndIt:
  472.  
  473.  End.
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.